package com.pig4cloud.pigx.strategy.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * StrategyTaskContractEnum
 *
 * @since 2022/8/15 16:19
 */
public enum StrategyTaskContractEnum {
    ;

    /**
     * 状态（0暂停、1运行中、2已完成、3关闭、4异常、5异常已解决）
     */
    @Getter
    @AllArgsConstructor
    public enum Status {
        /**
         * 0 暂停
         */
        PAUSE("暂停", "0"),
        /**
         * 1 运行中
         */
        RUNNING("运行中", "1"),
        /**
         * 2 已完成
         */
        COMPLETE("已完成", "2"),
        /**
         * 3 关闭
         */
        CLOSE("关闭", "3"),
        /**
         * 4 异常
         */
        ERROR("异常", "4"),
        /**
         * 5 异常已解决
         */
        ERROR_RESOLVED("异常已解决", "5");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (Status item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (Status item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 异常结算状态（0无异常、1结算中、2已结算）
     */
    @Getter
    @AllArgsConstructor
    public enum ErrorSettlementStatus {
        /**
         * 0 无异常
         */
        NONE("无异常", "0"),
        /**
         * 1 结算中
         */
        RUNNING("结算中", "1"),
        /**
         * 2 已结算
         */
        COMPLETE("已结算", "2");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (ErrorSettlementStatus item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (ErrorSettlementStatus item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 首次补仓方向（0做多、1做空、2尚未补仓）
     */
    @Getter
    @AllArgsConstructor
    public enum FirstAddSide {
        /**
         * 0 做多
         */
        LONG("做多", "0"),
        /**
         * 1 做空
         */
        SHORT("做空", "1"),
        /**
         * 2 尚未补仓
         */
        NONE("尚未补仓", "2");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (FirstAddSide item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (FirstAddSide item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

}
